package com.example.parent.bookmanage_ehcache.controller;

import com.example.parent.bookmanage_ehcache.entity.Book;
import com.example.parent.bookmanage_ehcache.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 图书管理控制器（集成Ehcache缓存）
 * 处理图书相关的RESTful API请求，提供图书查询、修改和删除功能
 * 基于Ehcache实现本地缓存，提升数据访问性能
 */
@RestController // 标识该类为REST控制器，所有方法返回数据（如JSON）而非视图页面
@RequestMapping("book") // 定义基础请求路径，所有接口路径均以"/book"为前缀
public class BookController {

    /**
     * 注入图书服务层对象
     * 用于调用业务逻辑方法，实现控制器与服务层的解耦
     */
    @Autowired
    private BookService bookService;

    /**
     * 根据图书ID查询图书信息
     *
     * @param id 图书唯一标识ID，通过URL路径参数传递
     * @return Book 图书实体对象，包含图书的详细信息（ID、名称、作者等）
     */
    @RequestMapping("/findById/{id}") // 映射请求路径：/book/findById/{id}
    public Book findById(@PathVariable Integer id) {
        // 调用服务层方法查询图书，返回查询结果
        return bookService.findById(id);
    }

    /**
     * 根据图书ID修改图书名称
     *
     * @param id   图书唯一标识ID，通过URL路径参数传递
     * @param name 新的图书名称，通过URL路径参数传递
     * @return Book 修改后的图书实体对象
     */
    @RequestMapping("/editById/{id}/{name}") // 映射请求路径：/book/editById/{id}/{name}
    public Book editById(@PathVariable Integer id, @PathVariable String name) {
        // 调用服务层方法更新图书名称，返回更新后的图书信息
        return bookService.updateById(id, name);
    }

    /**
     * 根据图书ID删除图书
     *
     * @param id 图书唯一标识ID，通过URL路径参数传递
     */
    @RequestMapping("/deleteById/{id}") // 映射请求路径：/book/deleteById/{id}
    public void deleteById(@PathVariable Integer id) {
        // 调用服务层方法删除指定ID的图书
        bookService.deleteById(id);
    }
}